package cn.tannn.ops.backup.entity;

import cn.tannn.ops.backup.constant.DbType;
import cn.tannn.ops.backup.constant.converter.DbTypeConverter;
import cn.tannn.ops.common.pojo.JpaCommonBean;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

/**
 * 数据库备份
 *
 * @author <a href="https://t.tannn.cn/">tan</a>
 * @version V1.0
 * @date 2024/9/10 下午12:23
 */
@Entity
@Table(name = "backup_db")
@Comment("数据库备份")
@Getter
@Setter
@ToString
@RequiredArgsConstructor
@DynamicUpdate
@DynamicInsert
public class DbBackup   extends JpaCommonBean<DbBackup> {

    /**
     * 连接名
     */
    @Comment("连接名")
    @Column(columnDefinition = "varchar(50) not null")
    String name;
    /**
     * 数据库连接地址
     */
    @Comment("数据库连接地址")
    @Column(columnDefinition = "varchar(100) default '127.0.0.1' ")
    String host;
    /**
     * 数据库账户
     */
    @Comment("数据库账户")
    @Column(columnDefinition = "varchar(100) default 'root' ")
    String user;
    /**
     * 数据库密码 todo 后期考虑加密存储
     */
    @Comment("数据库密码")
    @Column(columnDefinition = "varchar(100) not null")
    String password;
    /**
     * 数据库端口
     */
    @Comment("数据库端口")
    @Column(columnDefinition = "int default 3306")
    Integer port;

    /**
     * 数据库名
     */
    @Comment("数据库名")
    @Column(columnDefinition = "varchar(100) not null")
    String dbName;
    /**
     * 如果服务器上没有安装mysql客户端，需要手动指定mysqldump命令的路径,通过 which mysqldump 查询[docker的话格式为docker exec mysql /usr/bin/mysqldump]
     */
    @Comment("如果服务器上没有安装mysql客户端，需要手动指定mysqldump命令的路径,通过 which mysqldump 查询[docker的话格式为docker exec mysql /usr/bin/mysqldump]")
    @Column(columnDefinition = "varchar(100) not null")
    String dumpPath;

    /**
     * 备份存储地址（远程服务器上的地址）
     */
    @Comment("备份存储地址（远程服务器上的地址）")
    @Column(columnDefinition = "varchar(200) not null")
    String remoteBackupPath;

    /**
     * 数据库类型
     */
    @Comment("数据库类型")
    @Column(columnDefinition = "varchar(20) not null")
    @Convert(converter = DbTypeConverter.class)
    DbType dbType;


    /**
     * sshId[ssh_info表id]，根据这个进行备份的
     */
    @Comment("sshId[ssh_info表id]，根据这个进行备份的")
    @Column(columnDefinition = "bigint")
    @JsonSerialize(using = ToStringSerializer.class)
    Long sshId;

}
